#!/usr/bin/env python3
"""
简单跨平台壁纸设置脚本 - Deepin 专用版本
直接运行将桌面壁纸换成指定图片
"""

import os
import sys
import platform
import subprocess
from pathlib import Path

def set_wallpaper(image_path):
    """
    设置桌面壁纸
    :param image_path: 图片文件路径
    """
    # 检查图片文件是否存在
    if not os.path.exists(image_path):
        print(f"错误: 图片文件不存在: {image_path}")
        return False
    
    # 检查文件格式
    valid_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.webp'}
    file_ext = Path(image_path).suffix.lower()
    if file_ext not in valid_extensions:
        print(f"错误: 不支持的图片格式: {file_ext}")
        print(f"支持的格式: {', '.join(valid_extensions)}")
        return False
    
    # 获取绝对路径
    abs_path = os.path.abspath(image_path)
    print(f"正在设置壁纸: {abs_path}")
    
    # 根据操作系统设置壁纸
    system = platform.system().lower()
    
    if system == "windows":
        return set_windows_wallpaper(abs_path)
    elif system == "linux":
        return set_deepin_wallpaper(abs_path)  # 专门针对 Deepin
    else:
        print(f"不支持的操作系统: {system}")
        return False

def set_windows_wallpaper(image_path):
    """设置Windows壁纸"""
    try:
        import ctypes
        ctypes.windll.user32.SystemParametersInfoW(20, 0, image_path, 3)
        print("✅ Windows壁纸设置成功!")
        return True
    except Exception as e:
        print(f"❌ Windows壁纸设置失败: {e}")
        return False

def set_deepin_wallpaper(image_path):
    """专门针对 Deepin 系统设置壁纸"""
    try:
        # 方法1: 使用 gsettings (Deepin 基于 GNOME)
        print("尝试方法1: 使用 gsettings...")
        result = subprocess.run([
            'gsettings', 'set', 'com.deepin.wrap.gnome.desktop.background', 
            'picture-uri', f"file://{image_path}"
        ], capture_output=True, text=True)
        
        if result.returncode == 0:
            print("✅ 通过 gsettings 设置 Deepin 壁纸成功!")
            return True
        
        # 方法2: 使用 dconf (Deepin 的配置工具)
        print("尝试方法2: 使用 dconf...")
        result = subprocess.run([
            'dconf', 'write', 
            '/com/deepin/wrap/gnome/desktop/background/picture-uri', 
            f"'{image_path}'"
        ], capture_output=True, text=True)
        
        if result.returncode == 0:
            print("✅ 通过 dconf 设置 Deepin 壁纸成功!")
            return True
        
        # 方法3: 使用 Deepin 特有的命令
        print("尝试方法3: 使用 Deepin 特有命令...")
        result = subprocess.run([
            'gsettings', 'set', 'com.deepin.dde.appearance', 
            'background', f"file://{image_path}"
        ], capture_output=True, text=True)
        
        if result.returncode == 0:
            print("✅ 通过 Deepin 特有命令设置壁纸成功!")
            return True
        
        # 方法4: 使用 dbus 调用 Deepin 桌面服务
        print("尝试方法4: 使用 dbus...")
        dbus_script = f"""
        dbus-send --dest=com.deepin.daemon.Appearance /com/deepin/daemon/Appearance com.deepin.daemon.Appearance.SetBackground string:"{image_path}"
        """
        result = subprocess.run(dbus_script, shell=True, capture_output=True, text=True)
        
        if result.returncode == 0:
            print("✅ 通过 dbus 设置 Deepin 壁纸成功!")
            return True
        
        # 方法5: 直接修改配置文件
        print("尝试方法5: 修改配置文件...")
        config_dirs = [
            os.path.expanduser("~/.config/deepin"),
            os.path.expanduser("~/.config/dde-daemon"),
            os.path.expanduser("~/.cache/deepin"),
        ]
        
        for config_dir in config_dirs:
            if os.path.exists(config_dir):
                print(f"找到配置文件目录: {config_dir}")
                # 这里可以尝试查找并修改壁纸相关的配置文件
        
        # 方法6: 使用 feh 作为最后的手段
        print("尝试方法6: 使用 feh...")
        result = subprocess.run(['feh', '--bg-fill', image_path], capture_output=True, text=True)
        if result.returncode == 0:
            print("✅ 使用 feh 设置壁纸成功!")
            return True
        
        print("❌ 所有方法都失败了，请尝试手动设置壁纸")
        print("\n建议的解决方案:")
        print("1. 在 Deepin 桌面环境中手动设置壁纸")
        print("2. 检查 Deepin 桌面环境是否正常运行")
        print("3. 尝试重启 Deepin 桌面环境: systemctl restart lightdm")
        return False
        
    except Exception as e:
        print(f"❌ Deepin 壁纸设置失败: {e}")
        return False

def check_deepin_environment():
    """检查 Deepin 桌面环境是否正常"""
    try:
        # 检查 DDE 是否运行
        result = subprocess.run(['pgrep', 'dde-desktop'], capture_output=True, text=True)
        if result.returncode != 0:
            print("⚠️  Deepin 桌面环境 (dde-desktop) 可能没有运行")
            return False
        
        # 检查 gsettings 是否可用
        result = subprocess.run(['which', 'gsettings'], capture_output=True, text=True)
        if result.returncode != 0:
            print("⚠️  gsettings 命令不可用")
            return False
            
        print("✅ Deepin 桌面环境检查通过")
        return True
    except Exception as e:
        print(f"❌ 环境检查失败: {e}")
        return False

def main():
    """主函数"""
    print("=== Deepin 壁纸设置工具 ===")
    print(f"操作系统: {platform.system()}")
    
    # 检查环境
    if not check_deepin_environment():
        print("⚠️  环境检查发现问题，壁纸设置可能会失败")
    
    # # 如果提供了命令行参数，使用参数作为图片路径
    # if len(sys.argv) > 1:
    #     image_path = sys.argv[1]
    # else:
    #     # 如果没有参数，提示用户输入
    #     image_path = input("请输入图片文件路径: ").strip().strip('"').strip("'")
    
    # # 设置壁纸
    # success = set_wallpaper(image_path)
    
    
        # 直接指定图片路径
    image_path = "/data/home/w-dingyu01@uos/Pictures/Screenshots/截图_选择区域_20251029091213.png"
    success = set_wallpaper(image_path)
    
    
    if success:
        print("🎉 壁纸设置完成!")
        print("💡 如果壁纸没有立即更新，请尝试:")
        print("   - 重启桌面环境: systemctl restart lightdm")
        print("   - 或者注销后重新登录")
    else:
        print("💥 壁纸设置失败，请检查以上错误信息")
        sys.exit(1)

if __name__ == "__main__":
    main()